/**
 *  处理文本，换行，溢出隐藏
 *  ctx, //画布上下文
 *  fontSize, //字体大小
 *  word, //需要处理的文字
 *  maxWidth, //一行文字最大宽度
 *  x, //文字在x轴要显示的位置
 *  y
 *  maxLine, //文字最多显示的行数} options
 */
export const dealWords = function(options) {
	options.ctx.font = `${options.fontSize}px sans-serif`; //设置字体大小
	var allRow = Math.ceil(options.ctx.measureText(options.word).width / options.maxWidth); //实际总共能分多少行
	var count = allRow >= options.maxLine ? options.maxLine : allRow; //实际能分多少行与设置的最大显示行数比，谁小就用谁做循环次数
	var endPos = 0; //当前字符串的截断点
	for (var j = 0; j < count; j++) {
		var nowStr = options.word.slice(endPos); //当前剩余的字符串
		var rowWid = 0; //每一行当前宽度
		if (options.ctx.measureText(nowStr).width > options.maxWidth) {
			//如果当前的字符串宽度大于最大宽度，然后开始截取
			for (var m = 0; m < nowStr.length; m++) {
				rowWid += options.ctx.measureText(nowStr[m]).width; //当前字符串总宽度
				if (rowWid > options.maxWidth) {
					if (j === options.maxLine - 1) {
						//如果是最后一行
						options.ctx.fillText(nowStr.slice(0, m - 1) + '...', options.x, options.y + (j + 1) *
							18); //(j+1)*18这是每一行的高度
					} else {
						options.ctx.fillText(nowStr.slice(0, m), options.x, options.y + (j + 1) * 18);
					}
					endPos += m; //下次截断点
					break;
				}
			}
		} else {
			//如果当前的字符串宽度小于最大宽度就直接输出
			options.ctx.fillText(nowStr.slice(0), options.x, options.y + (j + 1) * 18);
		}
	}
};


/**
 * 裁切圆角
 * @param {*} ctx
 * @param {*} x
 * @param {*} y
 * @param {*} width
 * @param {*} height
 * @param {*} radius
 */
export const drawRoundRect = function(ctx, x, y, width, height, radius) {
	ctx.beginPath();
	ctx.arc(x + radius, y + radius, radius, Math.PI, (Math.PI * 3) / 2);
	ctx.lineTo(width - radius + x, y);
	ctx.arc(width - radius + x, radius + y, radius, (Math.PI * 3) / 2, Math.PI * 2);
	ctx.lineTo(width + x, height + y - radius);
	ctx.arc(width - radius + x, height - radius + y, radius, 0, (Math.PI * 1) / 2);
	ctx.lineTo(radius + x, height + y);
	ctx.arc(radius + x, height - radius + y, radius, (Math.PI * 1) / 2, Math.PI);
	ctx.closePath();
	ctx.clip();
};
